Send focus events to the root
authorMatthias Clasen <mclasen@redhat.com>
Fri, 9 Oct 2020 03:06:07 +0000 (23:06 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 9 Oct 2020 11:43:40 +0000 (07:43 -0400)
We are not propagating focus change events, and that is the only
place where we are listening for focus change events. If GtkWindow
does not see focus-in events for its popovers, we end up with
inadvertendly inactive windows.

Fixes: #3240
gtk/gtkmain.c

index 10780b7684353dd460d937281a3d68c4b7d39f30..bffb4cfa94b7cc1b5edb106c31f384b1b8404a47 100644 (file)
@@ -1648,8 +1648,11 @@ gtk_main_do_event (GdkEvent *event)
       break;
 
     case GDK_FOCUS_CHANGE:
-      if (!_gtk_widget_captured_event (target_widget, event, target_widget))
-        gtk_widget_event (target_widget, event, target_widget);
+      {
+        GtkWidget *root = GTK_WIDGET (gtk_widget_get_root (target_widget));
+        if (!_gtk_widget_captured_event (root, event, root))
+          gtk_widget_event (root, event, root);
+      }
       break;
 
     case GDK_KEY_PRESS: